package com.jinke.api.modules.third.uniuni.model.dto;

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;

import java.math.BigDecimal;

/**
 * @projectName:
 * @title: UniCreateBusOrderDto
 * @description: uniuni创建货件请求体
 * @see:
 * @author: hhp
 * @version: 1.0.0
 * @createTime: 2024/8/7 16:23
 */
@Data
@Accessors(chain = true)
public class UniCreateBusOrderDto {
    /**
     * 必填 客户编号。当合作伙伴/客户拥有多个商店时，此参数可用于指定商店编号。
     * 50 个字符
     */
    @JSONField(name = "customer_no")
    private String customerNo;
    /**
     * 非必填 您货件的批号。如果此参数为空，UniUni 将创建它。但是，您可以调用“更新现有货件的批号”API 进行后续更新。
     * 255 个字符
     */
    private String reference;
    /**
     * 非必填 客户编号。当合作伙伴/客户拥有多个商店时，此参数可用于指定商店编号。
     * 32 个字符
     */
    @JSONField(name = "trace_no")
    private String traceNo;
    /**
     * 非必填 行李编号。您可以稍后调用“更新现有货件的行李编号”API 进行更新。
     * 64 个字符
     */
    @JSONField(name = "bag_no")
    private String bagNo;
    /**
     * 非必填 此参数是指您的内部货件或订单号。它必须是唯一的。
     * 255 个字符
     */
    @JSONField(name = "internal_account_number")
    private String internalAccountNumber;
    /**
     * 非必填 包裹发件人。如果此字段为空，UniUni 将改用合作伙伴的名称。
     * 60 个字符
     */
    private String sender;
    /**
     * 非必填 发件人的电话号码。如果此字段为空，UniUni 将改用合作伙伴的电话。
     * 60 个字符
     */
    @JSONField(name = "start_phone")
    private String startPhone;
    /**
     * 必填 如果 UniUni 为您的公司提供跨加拿大送货服务，则此字段为必填项。对于其他合作伙伴，此字段是可选的。
     * 将货物移交给 Uniuni 的地点的邮政编码。
     * 60 个字符
     */
    @JSONField(name = "start_postal_code")
    private String startPostalCode;
    /**
     * 必填 此参数表示 Uniuni 接收货物的位置的完整地址。它用于计算运费，作为包裹的起点。
     * 请按照“市民号码+街道、城市、省/州、国家、邮政编码、#单位号码”的顺序操作。
     * 示例：
     * 14438 S Avalon Blvd， Gardena， CA， USA， 90248 10020 29a Ave NW， Edmonton， AB， Canada， T6N 1A8， #202
     * 255 个字符
     */
    @JSONField(name = "pickup_address")
    private String pickupAddress;
    /**
     * 必填
     * 如果 UniUni 为您的公司提供跨加拿大送货服务，则此字段为必填项。对于其他合作伙伴，此字段是可选的。
     * 此参数通过指示哪个 UniUni 仓库将处理到达扫描来帮助定位包裹的起点。该服务在上市仓库提供。
     * 对于加拿大，该值可以是：
     * 1： YVR
     * 2： YYZ
     * 3： YEG
     * 4： YYC
     * 5： YUL
     * 7： YOW
     * 14： YXU
     * 16： YWG
     * 17： YHZ
     * 19： YQB
     * 21： YQR
     * 23： YQM
     * 24：YYT
     * 25：YXE
     *
     * 对于美国，请参阅“UniUni Hub Warehouse Location in The US”部分中“id”列的值
     */
    @JSONField(name = "pickup_warehouse")
    private Integer pickupWarehouse;
    /**
     * 非必填 订单原产地国家/地区代码。值可以是 US、CA、CN
     * 255 个字符
     */
    @JSONField(name = "shipper_country_code")
    private String shipperCountryCode;
    /**
     * 必填 收件人姓名 255 个字符
     */
    private String receiver;
    /**
     * 非必填 收货人地址所在的城市。 255 个字符
     */
    private String city;
    /**
     * 非必填 收货人所在省份的代码。强烈建议使用两个字母。例如：BC， ON 255 个字符
     */
    private String province;
    /**
     * 非必填 收货人所在国家/地区的代码。强烈建议使用两个字母。例如：CA, US
     * 255 个字符
     */
    private String country;
    /**
     * 非必填 接收方地址的类型。该值可以是 1 或 2：
     * 1。住址
     * 2.公司地址
     */
    @JSONField(name = "address_type")
    private Integer addressType;
    /**
     * 必填 收件人的邮政编码
     * 60个字符
     */
    @JSONField(name = "postal_code")
    private String postalCode;
    /**
     * 必填 收件人的完整地址。
     * 请按照“市民号码+街道、城市、省/州、国家、邮政编码、#单位号码”的顺序操作。
     * 示例：
     * 14438 S Avalon Blvd， Gardena， CA， USA， 90248 10020 29a Ave NW， Edmonton， AB， Canada， T6N 1A8， #202
     * 255个字符
     */
    @JSONField(name = "delivery_address")
    private String deliveryAddress;

    /**
     * 非必填 收件人的单元号。
     * 120个字符
     */
    @JSONField(name = "delivery_unit_no")
    private String deliveryUnitNo;
    /**
     * 非必填 收件人的buzz code。
     * 50 个字符
     */
    @JSONField(name = "buzz_code")
    private String buzzCode;
    /**
     * 非必填 收件人的电话号码对于按时无误地送达包裹至关重要。我们敦促我们的合作伙伴提供电话号码，以方便还车过程，
     * 特别是对于我们的司机需要联系收件人的公寓地址。如果未提供电话号码，加拿大收货人将不得不从 UniUni 仓库取货，
     * 而美国收货人将不得不致电 UniUni 安排另一次送货。
     * 255个字符
     */
    @JSONField(name = "receiver_phone")
    private String receiverPhone;
    /**
     * 非必填 收件人的电子邮件地址。此参数用于在触发以下事件时发送通知：
     * ·外出送货
     * ·已交付
     * ·尝试
     * 失败 ·准备取货
     * ·5 天后到期
     * 255个字符
     */
    @JSONField(name = "receiver_email")
    private String receiverEmail;
    /**
     * 必填/非必填 包装长度。如果您的计费方式遵循维度规则，则此字段为必填字段。十进制（10,3）整数部分7位
     */
    private BigDecimal length;
    /**
     * 必填/非必填 包装的宽度。如果您的计费方式遵循维度规则，则此字段为必填字段。十进制（10,3）整数部分7位
     */
    private BigDecimal width;
    /**
     * 必填/非必填 包装高度。如果您的计费方式遵循维度规则，则此字段为必填字段。十进制（10,3）整数部分7位
     */
    private BigDecimal height;
    /**
     * 非必填 尺寸的度量单位。值可以是 CM 或 IN。默认值为 CM。请确保您使用的计量单位 （UOM） 与价格卡中的计量单位一致。
     * 2 个字符
     */
    @JSONField(name = "dimension_uom")
    private String dimensionUom;
    /**
     * 必填/非必填 包装重量。如果您的计费方式使用重量信息，则此字段为必填字段。十进制（10,3）整数部分7位
     */
    private BigDecimal weight;
    /**
     * 非必填 重量的测量单位。值可以是 KGS、LBS 或 OZS。默认值为 KGS。请确保您使用的计量单位 （UOM） 与价格卡中的计量单位一致。
     * 3个字符
     */
    @JSONField(name = "weight_uom")
    private String weightUom;
    /**
     * 非必填 包裹的总价值。强烈建议处理包裹的丢失。
     */
    @JSONField(name = "total_value")
    private BigDecimal totalValue;
    /**
     * 非必填 以加元或美元(CAD or USD)表示的物品价值货币。
     * 3个字符
     */
    private String currency;
    /**
     * 非必填 项目描述。使用逗号分隔不同的项目。
     * 1024 个字符
     */
    @JSONField(name = "item_description")
    private String itemDescription;
    /**
     * 非必填 特殊送货说明。即将其留在侧门，按门铃等。
     * 200 个字符
     */
    @JSONField(name = "driver_notes")
    private String driverNotes;
    /**
     * 非必填 0：正常（默认值）
     * 1：易碎
     * 8：有电池
     * 16：敏感
     * 32：有液体
     *
     * 如果包裹有多种危险类型，则对数字求和。
     */
    @JSONField(name = "danger_type")
    private Integer dangerType;
    /**
     * 非必填 0：不需要签名 1：需要签名
     */
    @JSONField(name = "require_signature")
    private Integer requireSignature;
    /**
     * 非必填 此字段允许您在标签上打印自定义消息。您最多可以使用两行文本。数据格式是具有两个键值对的 JSON 对象。例如：
     * {“key1”： “value1”， “key2”： “value2”}
     * 键和值可以是您希望在标签上显示的任何字符串。
     *
     * 键< 20 个字符，
     * 值< 25 个字符，
     * 不超过 2 对。
     */
    @JSONField(name = "custom_field")
    private String customField;
}
